package com.travelsmart.client.apresentacao.view.subview;

import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.travelsmart.client.apresentacao.i18n.I18nConstantes;
import com.travelsmart.client.apresentacao.i18n.I18nMessages;
import com.travelsmart.client.apresentacao.view.BaseView;
import com.travelsmart.client.apresentacao.widget.FormSuggestBox;
import com.travelsmart.client.apresentacao.widget.FormTextBox;
import com.travelsmart.client.apresentacao.widget.FormWidget;
import com.travelsmart.client.bean.to.EnderecoPagamentoTO;

public class ViewEnderecoCombranca extends BaseView {
	private final VerticalPanel vPanelViewEnderecoCombranca = new VerticalPanel();
	private final HTML msg = new HTML();
	private final FormSuggestBox fsb_pais = new FormSuggestBox("fsb_pais",
			I18nMessages.INSTANCE.help_pais_cobranca(),
			I18nConstantes.INSTANCE.paises(),
			new FormWidget.HandlerValidation<String>() {
				@Override
				public boolean handle(String valor) {
					boolean retorno = true;
					if (valor == null || valor.trim().equals("")) {
						msg.setHTML(I18nMessages.INSTANCE
								.MSG_CAMPO_OBRIGATORIO(I18nMessages.INSTANCE
										.pais_cobranca()));
						retorno = false;
					} else {
						if (valor.length() > 20) {
							msg.setHTML(I18nMessages.INSTANCE
									.MSG_TAMANHO_MAX_CAMPO(
											I18nMessages.INSTANCE
													.pais_cobranca(), 20));
							retorno = false;
						} else {
							if (!valor.matches("\\w+")) {
								msg.setHTML(I18nMessages.INSTANCE
										.MSG_TAMANHO_MAX_CAMPO(
												I18nMessages.INSTANCE
														.pais_cobranca(),
												20));
								retorno = false;
							}
						}
					}
					return retorno;
				}
			});
	private final FormTextBox txt_endereco = new FormTextBox("txt_endereco",
			I18nMessages.INSTANCE.help_endereco_cobranca(), 16,
			new FormWidget.HandlerValidation<String>() {
				@Override
				public boolean handle(String valor) {
					boolean retorno = true;
					if (valor == null || valor.trim().equals("")) {
						msg.setHTML(I18nMessages.INSTANCE
								.MSG_CAMPO_OBRIGATORIO(I18nMessages.INSTANCE
										.endereco_cobranca()));
						retorno = false;
					} else {
						if (valor.length() > 16) {
							msg.setHTML(I18nMessages.INSTANCE
									.MSG_TAMANHO_MAX_CAMPO(
											I18nMessages.INSTANCE
													.endereco_cobranca(),
											16));
							retorno = false;
						} else {
							if (!valor.matches("\\w+")) {
								msg.setHTML(I18nMessages.INSTANCE.MSG_TAMANHO_MAX_CAMPO(
										I18nMessages.INSTANCE
												.endereco_cobranca(), 16));
								retorno = false;
							}
						}
					}
					return retorno;
				}
			});
	private final FormTextBox txt_cidade = new FormTextBox("txt_cidade",
			I18nMessages.INSTANCE.help_cidade_cobranca(), 16,
			new FormWidget.HandlerValidation<String>() {
				@Override
				public boolean handle(String valor) {
					boolean retorno = true;
					if (valor == null || valor.trim().equals("")) {
						msg.setHTML(I18nMessages.INSTANCE
								.MSG_CAMPO_OBRIGATORIO(I18nMessages.INSTANCE
										.cidade_cobranca()));
						retorno = false;
					} else {
						if (valor.length() > 16) {
							msg.setHTML(I18nMessages.INSTANCE
									.MSG_TAMANHO_MAX_CAMPO(
											I18nMessages.INSTANCE
													.cidade_cobranca(), 16));
							retorno = false;
						} else {
							if (!valor.matches("\\w+")) {
								msg.setHTML(I18nMessages.INSTANCE
										.MSG_TAMANHO_MAX_CAMPO(
												I18nMessages.INSTANCE
														.cidade_cobranca(),
												16));
								retorno = false;
							}
						}
					}
					return retorno;
				}
			});
	private final FormTextBox txt_cep = new FormTextBox("txt_cep",
			I18nMessages.INSTANCE.help_cep_cobranca(), 9,
			new FormWidget.HandlerValidation<String>() {
				@Override
				public boolean handle(String valor) {
					boolean retorno = true;
					if (valor == null || valor.trim().equals("")) {
						msg.setHTML(I18nMessages.INSTANCE
								.MSG_CAMPO_OBRIGATORIO(I18nMessages.INSTANCE
										.cep_cobranca()));
						retorno = false;
					} else {
						if (valor.length() > 9) {
							msg.setHTML(I18nMessages.INSTANCE
									.MSG_TAMANHO_MAX_CAMPO(
											I18nMessages.INSTANCE
													.cep_cobranca(), 9));
							retorno = false;
						} else {
							if (!valor.matches("\\d{5}-\\d{3}")) {
								msg.setHTML(I18nMessages.INSTANCE
										.MSG_TAMANHO_MAX_CAMPO(
												I18nMessages.INSTANCE
														.cep_cobranca(), 9));
								retorno = false;
							}
						}
					}
					return retorno;
				}
			});
	private final FormTextBox txt_empresa = new FormTextBox("txt_empresa",
			I18nMessages.INSTANCE.help_empresa_cobranca(), 16,
			new FormWidget.HandlerValidation<String>() {
				@Override
				public boolean handle(String valor) {
					boolean retorno = true;
					if (valor == null || valor.trim().equals("")) {
						msg.setHTML(I18nMessages.INSTANCE
								.MSG_CAMPO_OBRIGATORIO(I18nMessages.INSTANCE
										.empresa_cobranca()));
						retorno = false;
					} else {
						if (valor.length() > 16) {
							msg.setHTML(I18nMessages.INSTANCE.MSG_TAMANHO_MAX_CAMPO(
									I18nMessages.INSTANCE
											.empresa_cobranca(), 16));
							retorno = false;
						} else {
							if (!valor.matches("\\w+")) {
								msg.setHTML(I18nMessages.INSTANCE.MSG_TAMANHO_MAX_CAMPO(
										I18nMessages.INSTANCE
												.empresa_cobranca(), 16));
								retorno = false;
							}
						}
					}
					return retorno;
				}
			});

	public boolean validar() {
		boolean retorno = false;
		// INICIO - EXERC. 3
		if (fsb_pais.validar() && txt_endereco.validar()
				&& txt_cidade.validar() && txt_cep.validar()
				&& txt_empresa.validar()) {
			retorno = true;
		}
		// FIM - EXERC. 3
		return retorno;
	}

	public ViewEnderecoCombranca(HTML nome) {
		super(nome);
		initWidget(vPanelViewEnderecoCombranca);
	}
	public void exec(){
		vPanelViewEnderecoCombranca.clear();
		vPanelViewEnderecoCombranca.add(nome);
		vPanelViewEnderecoCombranca.add(msg);
		vPanelViewEnderecoCombranca.add(gerarGridEnderecoCobranca());
	}

	private Grid gerarGridEnderecoCobranca() {
		Grid enderecoCobranca = new Grid(5, 2);
		// INICIO - EXERC. 3
		enderecoCobranca.setHTML(0, 0, 
				I18nMessages.INSTANCE.pais_cobranca() + ":");
		enderecoCobranca.setWidget(0, 1, fsb_pais);
		enderecoCobranca.setHTML(1, 0, 
				I18nMessages.INSTANCE.endereco_cobranca() + ":");
		enderecoCobranca.setWidget(1, 1, txt_endereco);
		enderecoCobranca.setHTML(2, 0, 
				I18nMessages.INSTANCE.cidade_cobranca() + ":");
		enderecoCobranca.setWidget(2, 1, txt_cidade);
		enderecoCobranca.setHTML(3, 0, 
				I18nMessages.INSTANCE.cep_cobranca() + ":");
		enderecoCobranca.setWidget(3, 1, txt_cep);
		enderecoCobranca.setHTML(4, 0, 
				I18nMessages.INSTANCE.empresa_cobranca() + ":");
		enderecoCobranca.setWidget(4, 1, txt_empresa);
		// FIM - EXERC. 3 #
		return enderecoCobranca;
	}

	public EnderecoPagamentoTO criarEnderecoPagamentoTO() {
		EnderecoPagamentoTO enderecoPagamentoTO = new EnderecoPagamentoTO();
		// INICIO - EXERC. 3
		enderecoPagamentoTO.setCep(txt_cep.getValue());
		enderecoPagamentoTO.setCidade(txt_cidade.getValue());
		enderecoPagamentoTO.setEndereco(txt_endereco.getValue());
		enderecoPagamentoTO.setPais(fsb_pais.getValue());
		// FIM - EXERC. 3
		return enderecoPagamentoTO;
	}

}

